package com.castle.fortress.admin.cms.service.impl;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.castle.fortress.admin.cms.dto.CmsConfigDto;
import com.castle.fortress.admin.cms.entity.CmsConfigEntity;
import com.castle.fortress.admin.cms.mapper.CmsConfigMapper;
import com.castle.fortress.admin.cms.service.CmsConfigService;
import com.castle.fortress.common.exception.BizException;
import com.castle.fortress.common.respcode.GlobalRespCode;
import com.castle.fortress.common.utils.ConvertUtil;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * cms通用配置表 服务实现类
 *
 * @author castle
 * @since 2022-02-18
 */
@Service
public class CmsConfigServiceImpl extends ServiceImpl<CmsConfigMapper, CmsConfigEntity> implements CmsConfigService {
    /**
    * 获取查询条件
    * @param cmsConfigDto
    * @return
    */
    public QueryWrapper<CmsConfigEntity> getWrapper(CmsConfigDto cmsConfigDto){
        QueryWrapper<CmsConfigEntity> wrapper= new QueryWrapper();
        if(cmsConfigDto != null){
            CmsConfigEntity cmsConfigEntity = ConvertUtil.transformObj(cmsConfigDto,CmsConfigEntity.class);
            wrapper.like(cmsConfigEntity.getId() != null,"id",cmsConfigEntity.getId());
            wrapper.like(StrUtil.isNotEmpty(cmsConfigEntity.getName()),"name",cmsConfigEntity.getName());
            wrapper.like(StrUtil.isNotEmpty(cmsConfigEntity.getTagName()),"tag_name",cmsConfigEntity.getTagName());
            wrapper.like(StrUtil.isNotEmpty(cmsConfigEntity.getValueType()),"value_type",cmsConfigEntity.getValueType());
            wrapper.like(StrUtil.isNotEmpty(cmsConfigEntity.getTagValues()),"tag_values",cmsConfigEntity.getTagValues());
            wrapper.like(cmsConfigEntity.getUpdateUser() != null,"update_user",cmsConfigEntity.getUpdateUser());
            wrapper.like(cmsConfigEntity.getUpdateTime() != null,"update_time",cmsConfigEntity.getUpdateTime());
            wrapper.like(StrUtil.isNotEmpty(cmsConfigEntity.getTagGroup()),"tag_group",cmsConfigEntity.getTagGroup());
            wrapper.like(cmsConfigEntity.getSort() != null,"sort",cmsConfigEntity.getSort());
        }
        wrapper.orderByAsc("sort");
        return wrapper;
    }


    @Override
    public IPage<CmsConfigDto> pageCmsConfig(Page<CmsConfigDto> page, CmsConfigDto cmsConfigDto) {
        QueryWrapper<CmsConfigEntity> wrapper = getWrapper(cmsConfigDto);
        Page<CmsConfigEntity> pageEntity = new Page(page.getCurrent(), page.getSize());
        Page<CmsConfigEntity> cmsConfigPage=baseMapper.selectPage(pageEntity,wrapper);
        Page<CmsConfigDto> pageDto = new Page(cmsConfigPage.getCurrent(), cmsConfigPage.getSize(),cmsConfigPage.getTotal());
        pageDto.setRecords(ConvertUtil.transformObjList(cmsConfigPage.getRecords(),CmsConfigDto.class));
        return pageDto;
    }


    @Override
    public List<CmsConfigDto> listCmsConfig(CmsConfigDto cmsConfigDto){
        QueryWrapper<CmsConfigEntity> wrapper = getWrapper(cmsConfigDto);
        List<CmsConfigEntity> list = baseMapper.selectList(wrapper);
        return ConvertUtil.transformObjList(list,CmsConfigDto.class);
    }

    @Override
    public boolean updateCmsConfigs(List<CmsConfigDto> list) {
        list.forEach(item->{
            if( item.getId() == null || item.equals(0L)){
                throw new BizException(GlobalRespCode.PARAM_MISSED);
            }
        });
        List<CmsConfigEntity> entities = ConvertUtil.transformObjList(list,CmsConfigEntity.class);
        return updateBatchById(entities);
    }
}

